home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
LOGIC Apps
/
Logic-APPLE_II_APPS.iso
/
mac
/
LOGIC Apple II 5.25" Library - ProDOS
/
PRO090.dsk
/
Z.LINK.EDIT.bas
< prev
next >
Wrap
BASIC Source File
|
2012-02-16
|
10KB
|
273 lines
0 REM /z.link.edit
1 PN$ = "z.link.edit"
99 :
100 REM *************************************
105 REM *
110 REM * Z-Link key remappings editor
120 REM *
130 REM * by David A. Lyons, 11-Apr-88
140 REM * (public domain...have fun)
150 REM *
155 REM *************************************
156 :
157 REM * Force run at $2000 (not $800)
160 IF PEEK(104) = 32 THEN 200
170 POKE 104,32: POKE 103,1: POKE 256 *32,0
180 PRINT CHR$(4);"run ";PN$
190 :
200 TEXT : HOME : NORMAL : SPEED= 255: NOTRACE
205 PRINT CHR$(4);"pr#3": PRINT
210 :
220 REM * check for IIgs
230 POKE 768,56: POKE 769,32: POKE 770,31: POKE 771,254: POKE 772,169: POKE 773,0: POKE 774,42: POKE 775,133: POKE 776,0: POKE 777,96: POKE 778,173: POKE 779,37: POKE 780,192: POKE 781,133: POKE 782,0: POKE 783,173: POKE 784,97: POKE 785,192: POKE 786,41: POKE 787,128
232 POKE 788,5: POKE 789,0: POKE 790,133: POKE 791,0: POKE 792,173: POKE 793,98: POKE 794,192: POKE 795,41: POKE 796,128: POKE 797,106: POKE 798,5: POKE 799,0: POKE 800,41: POKE 801,211: POKE 802,133: POKE 803,0: POKE 804,96
240 CALL 768:GS = ( PEEK(0) = 0)
300 :
310 DF$ = "z.link.config"
320 GOSUB 2000: REM * build command table
330 DIRTY = 0: REM * "dirty" = need to save file
340 LD = 0: REM * "ld" = loaded a config file
399 :
405 ADR = 2048
500 REM * calculate locations within file
510 KT = ADR + PEEK(ADR +11) + PEEK(ADR +12) *256: REM * Key Table
520 MT = KT +256: REM * Modifier Table
530 DT = MT +256: REM * Definition Table
999 :
1000 REM * main menu
1005 HOME : PRINT
1010 PRINT "============================"
1020 PRINT "Z-Link Key Remappings Editor"
1030 PRINT
1040 PRINT "David A. Lyons 11-Apr-88"
1045 PRINT "Last Modification: 2-Jun-88"
1050 PRINT "============================"
1060 PRINT
1100 FOR I = 1 TO LEN(CMD$)
1110 PRINT " "; LEFT$(CMD$(I),1);". ";CMD$(I)
1120 NEXT I
1190 PRINT
1200 PRINT "Select: ";
1205 :
1209 REM Get a key & make it uppercase
1210 GET A$: IF A$ > = "a" THEN A$ = CHR$( ASC(A$) -32)
1215 FOR I = 1 TO LEN(CMD$)
1216 IF A$ = MID$ (CMD$,I,1) THEN CMD = I:I = 100: NEXT I: GOTO 1300
1220 NEXT I: PRINT CHR$(7);: GOTO 1210
1300 REM * command number CMD
1310 HOME
1350 C$ = "- " +CMD$(CMD) +" -": GOSUB 63000: PRINT
1400 ON CMD GOSUB 11000,12000,13000,14000,15000,16000,17000,18000
1410 GOTO 405
1999 :
2000 REM * Build CMD$, CMD$()
2010 CMD$ = ""
2020 READ A$: IF A$ = "***" THEN 2100
2025 CMD$ = CMD$ + LEFT$(A$,1)
2030 CMD$( LEN(CMD$)) = A$
2040 GOTO 2020
2100 RETURN
2500 DATA Load config file, Save config file, View remappings
2510 DATA Delete a remapping,Make a new remapping
2520 DATA Quit (to BASIC)
2530 DATA Bye
2540 DATA ***
2999 :
3000 REM * Didn't load any config file yet
3005 VTAB 8
3010 PRINT : PRINT "You need to L)oad a config file first."
3020 VTAB 22: GOTO 60000
3030 :
3100 REM * Dirty; continue anyway?
3110 IF NOT DIRTY THEN RETURN
3115 VTAB 8
3120 PRINT : PRINT "Okay to lose changes";
3130 GOSUB 57000
3140 IF Y THEN RETURN
3150 POP : RETURN
3160 :
5000 REM * Get the Ith definition
5010 REM * returns K,M=key,modifiers
5020 REM * returns K$,M$ = printable key,modifiers
5030 REM * returns D$ = printable definition
5040 REM * returns D = address of definition
5100 K = PEEK(KT +I): GOSUB 6500
5130 M = PEEK(MT +I):M2 = M: GOSUB 6000
5220 GOSUB 7000
5500 RETURN
5999 :
6000 REM * return M$=name for modifier combination M2
6005 M$ = ""
6010 IF M2 >127 THEN M2 = M2 -128:M$ = M$ +"OA-"
6020 IF M2 >63 THEN M2 = M2 -64:M$ = M$ +"CA-"
6030 IF M2 >31 THEN M2 = M2 -32: REM * updated mod latch...
6040 IF M2 >15 THEN M2 = M2 -16:M$ = M$ +"KP-"
6050 IF M2 >7 THEN M2 = M2 -8:M$ = M$ +"Ignore-"
6060 IF M2 >3 THEN M2 = M2 = 4:M$ = M$ +"CapsLock-"
6070 IF M2 >1 THEN M2 = M2 -2:M$ = M$ +"Control-"
6080 IF M2 >0 THEN M2 = M2 -1:M$ = M$ +"Shift-"
6090 RETURN
6095 :
6500 REM * Return K$ = printable name for key K
6510 KK = K: IF KK >127 THEN KK = KK -128
6520 K$ = CHR$(KK): IF KK = 127 THEN K$ = "Delete"
6530 IF KK <32 THEN K$ = "^" + CHR$(KK +64)
6540 IF KK = 13 THEN K$ = "cr": RETURN
6550 IF KK = 27 THEN K$ = "Esc": RETURN
6560 IF KK = 8 THEN K$ = "Backsp": RETURN
6562 IF KK = 21 THEN K$ = "Forwsp": RETURN
6564 IF KK = 10 THEN K$ = "Downarr": RETURN
6566 IF KK = 11 THEN K$ = "Uparr": RETURN
6570 IF KK = 9 THEN K$ = "Tab": RETURN
6580 IF KK = 32 THEN K$ = "Space": RETURN
6950 RETURN
6960 :
7000 REM * return D=address of Ith definition, D$=printable version
7010 D = DT:I2 = I
7020 IF I2 = 0 THEN 7500: REM * while i2>0 do...
7030 IF PEEK(D) + PEEK(D +1) < >0 THEN D = D +2: GOTO 7030
7040 D = D +2
7050 I2 = I2 -1: GOTO 7020
7100 :
7500 REM * build printable version (D$) of def at D
7510 D2 = D:D$ = ""
7515 K9 = K:M9 = M:K9$ = K$:M9$ = M$
7520 IF PEEK(D2) + PEEK(D2 +1) = 0 THEN 7900
7530 M2 = PEEK(D2): GOSUB 6000
7540 K = PEEK(D2 +1): GOSUB 6500
7550 D$ = D$ +M$ +K$ +" "
7560 D2 = D2 +2: GOTO 7520
7900 K = K9:M = M9:K$ = K9$:M$ = M9$: RETURN
7999 :
8000 REM * get a keypress --> K,M
8010 INVERSE : PRINT " "; CHR$(8);: NORMAL
8020 WAIT -16384,128
8030 IF NOT GS THEN 8040
8032 CALL 778:M = PEEK(0): GOTO 8070
8040 M = 0: IF PEEK( -16287) >127 THEN M = M +128
8050 IF PEEK( -16286) >127 THEN M = M +64
8070 GET K$:K = ASC(K$) +128: PRINT " "; CHR$(8);
8100 RETURN
8999 :
9000 REM * Search for remapping M,K --> return I (-1=not found)
9010 I = 0
9020 IF PEEK(KT +I) = K AND PEEK(MT +I) = M THEN RETURN
9030 I = I +1: IF I <256 THEN 9020
9040 I = -1: RETURN
9050 :
10999 :
11000 REM * Load config file
11005 GOSUB 3100
11007 VTAB 8
11100 BS$ = "": FOR I = 1 TO LEN(DF$):BS$ = BS$ + CHR$(8): NEXT
11200 PRINT "Name of Z-Link config file: ";DF$;BS$;
11210 INPUT "";N$
11220 IF N$ = "" THEN N$ = DF$
11225 DF$ = N$
11230 PRINT CHR$(4);"bload ";N$;",tvar,a";ADR
11240 DIRTY = 0:LD = 1
11300 RETURN
11999 :
12000 REM * Save config file
12010 IF NOT LD THEN 3000
12090 PRINT CHR$(4);"bsave ";N$;",tvar,a";ADR
12100 DIRTY = 0: RETURN
12999 :
13000 REM * View remappings
13010 IF NOT LD THEN 3000
13100 FOR I = 0 TO 255
13110 GOSUB 5000
13120 IF M +K = 0 THEN I = 256: GOTO 13200
13130 IF LEN(M$ +K$) <15 THEN PRINT SPC( 15 - LEN(M$ +K$));
13135 PRINT M$;K$;" --> ";D$
13200 NEXT
13210 GOTO 60000
13999 :
14000 REM * Delete a remapping
14010 IF NOT LD THEN 3000
14015 VTAB 8
14020 PRINT "Delete which remapping: ";
14030 GOSUB 8000
14040 M2 = M: GOSUB 6000: GOSUB 6500: PRINT M$;K$
14045 PRINT : PRINT
14050 GOSUB 9000: REM * find remapping --> I
14060 IF I <0 THEN PRINT "That key isn't defined.": GOTO 14500
14065 DIRTY = 1
14070 PRINT "Deleting...";
14072 FOR J = I TO 254: POKE KT +J, PEEK(KT +J +1)
14074 POKE MT +J, PEEK(MT +J +1): NEXT
14076 POKE MT +255,0: POKE KT +255,0
14080 GOSUB 5000: REM * D=address of def
14090 D2 = D
14100 IF PEEK(D2) + PEEK(D2 +1) = 0 THEN 14115
14110 D2 = D2 +2: GOTO 14100
14115 D2 = D2 +2
14120 L = D2 -D
14130 FOR J = D TO DT +1023 -L: POKE J, PEEK(J +L): NEXT
14140 FOR J = DT +1024 -L TO DT +1023: POKE J,0: NEXT
14200 PRINT "done."
14500 VTAB 22: GOTO 60000
14999 :
15000 REM * Make a new remapping
15010 IF NOT LD THEN 3000
15020 VTAB 8: PRINT "Key to remap: ";
15030 GOSUB 8000:M2 = M: GOSUB 6000: GOSUB 6500: IF M >127 THEN PRINT "Open Apple-keys are reserved for internal Z-Link commands.": GOTO 15020
15040 PRINT M$;K$: PRINT : PRINT
15050 I = 0
15060 IF PEEK(KT +I) + PEEK(MT +I) = 0 THEN 15200
15070 IF PEEK(KT +I) = K AND PEEK(MT +I) = M THEN 15900
15080 I = I +1: IF I <256 THEN 15060
15090 PRINT "Too many remappings (max=256).": GOTO 60000
15199 :
15200 REM * create definition #i
15202 DIRTY = 1
15205 PRINT "(Apple-Return = finish, Apple-Delete backs up, Apple-X to enter a literal)"
15207 PRINT : PRINT "Enter definition:": PRINT :V = PEEK(37) +1
15210 GOSUB 7000: REM * D = addr of definition
15220 POKE KT +I,K: POKE MT +I,M
15230 D2 = D
15299 :
15300 REM * get next key
15310 GOSUB 8000
15315 IF M = 128 AND (K = 216 OR K = 248) THEN GOSUB 8000:M = M +8
15320 IF M = 128 AND (K = 255 OR K = 136) THEN 15500
15330 IF M = 128 AND K = 141 THEN VTAB 22: GOTO 60000
15340 M2 = M: GOSUB 6000: GOSUB 6500: PRINT M$;K$;" ";
15350 POKE D2,M: POKE D2 +1,K:D2 = D2 +2
15370 GOTO 15300
15499 :
15500 REM * back up (Apple-Delete or Apple-Left)
15510 IF D2 = D THEN PRINT CHR$(7);: GOTO 15300
15520 VTAB V -1: PRINT
15530 D2 = D2 -2: POKE D2,0: POKE D2 +1,0
15535 IF D2 = D THEN 15570
15540 FOR J = D TO D2 -2 STEP 2:M2 = PEEK(J):K = PEEK(J +1)
15550 GOSUB 6000: GOSUB 6500: PRINT M$;K$;" ";
15560 NEXT
15570 PRINT CHR$(11);: GOTO 15300
15899 :
15900 REM * already defined
15910 PRINT "That key is already defined.": GOTO 60000
15999 :
16000 REM * Quit to BASIC
16010 GOSUB 3100
16100 HOME : PRINT "Bye!": END
16999 :
17000 REM * BYE
17010 GOSUB 3100
17100 PRINT CHR$(4);"BYE": STOP
17999 :
56999 :
57000 REM * Get Yes/No answer (Y=1 or 0)
57010 PRINT "? (y/n) ";
57020 GET A$: IF A$ = "y" OR A$ = "Y" THEN PRINT "Yes":Y = 1: RETURN
57030 IF A$ = "n" OR A$ = "N" THEN PRINT "No":Y = 0: RETURN
57040 PRINT CHR$(7);: GOTO 57020
59999 :
60000 REM * Get space to continue
60010 PRINT : PRINT "Press SPACE to continue ";
60020 GET A$: IF A$ < >" " THEN 60020
60030 PRINT : RETURN
62999 :
63000 REM * Center C$
63010 HTAB 40 - LEN(C$)/2: PRINT C$: RETURN